<?php
/**


*/

class SortUtils 
{

	public function SortUtils()
	{
	     
	}

  
	 /**
	  * insert sort
	  *
	  * @param   array
	  * @return  bool
	  */
	
	 public function insert_sort($arr) 
	 {
	     if ( ! is_array($arr) OR count($arr) == 0) {
	         return FALSE;
	     }
	
	     $count = count($arr);
	
	     for ($i = 1; $i < $count; $i++) {
	
	         $tmp = $arr[$i];
	
	         for($j = $i-1; $j >= 0; $j--) { 
	
	             if($arr[$j] > $tmp) {
	
	                 $arr[$j+1] = $arr[$j];
	
	                 $arr[$j] = $tmp;
	
	             }
	         }
	     }
	
	     return $arr;
	 }

	 /**
	  * select sort
	  *
	  * @param   array
	  * @return  bool
	  */
	
	 public function select_sort($arr) 
	 {
	     if ( ! is_array($arr) OR count($arr) == 0) {
	         return FALSE;
	     }
	      
	     $count = count($arr);
	
	     for ($i = 0; $i < $count-1; $i++) {
	         $min = $i;
	         for ($j = $i+1; $j < $count; $j++) {
	
	             if ($arr[$min] > $arr[$j])
	             	$min = $j;
	         }
	
	         if ($min != $i) {
	
	             $tmp = $arr[$min];
	
	             $arr[$min] = $arr[$i];
	
	             $arr[$i] = $tmp;
	         }
	     }
	
	     return $arr;
	 }

	 /**
	  * bubble sort
	  *
	  * @param   array
	  * @return  bool
	  */
	
	 public function bubble_sort($arr) 
	 {
	     if ( ! is_array($arr) OR count($arr) == 0) {
	         return FALSE;
	     }
	
	     $count = count($arr);
	
	     for ($i = 0; $i < $count; $i++) {
	
	         for ($j = $count-1; $j > $i; $j--) {
	
	             if ($arr[$j] < $arr[$j-1]) {
	
	                 $tmp = $arr[$j];
	
	                 $arr[$j] = $arr[$j-1];
	
	                 $arr[$j-1] = $tmp;
	
	             }
	
	         }
	
	     }
	
	     return $arr;   
	
	 }

	/**
	  * quich sort
	  *
	  * @param   array
	  * @return  bool	
	*/
	
	public function quick_sort($arr) 
	{
		if (count($arr) <= 1) 
	     	return $arr;
	
	     $key 		= $arr[0];
	
	     $left_arr 	= array();	
	     $right_arr = array();
	
	     for ($i = 1; $i < count($arr); $i++){	
	         $result = $this->compare($arr[$i], $key);
	         
	         if($result == -1 || $result == 0)
	             $left_arr[] = $arr[$i];	
	         else	
	             $right_arr[] = $arr[$i];	
	     }
	
	     $left_arr 	= $this->quick_sort($left_arr);
	     $right_arr = $this->quick_sort($right_arr);
	
	     return array_merge($left_arr, array($key), $right_arr);	
	}

	public function compare($obj1, $obj2)
	{
		if($obj1 > $obj2)
			return 1;
		else if ($obj1 < $obj2)
			return -1;
		else
			return 0;
	}


}


?>